// ==ClosureCompiler==
// @output_file_name goog.ext.min.js
// @compilation_level SIMPLE_OPTIMIZATIONS
// @use_closure_library true
// ==/ClosureCompiler==
goog.provide('goog.ext');

goog.require('goog.dom');
goog.require('goog.dom.classes');
goog.require('goog.dom.forms');
goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('goog.ui.Tooltip');
goog.require('goog.ui.Dialog');
goog.require('goog.net.XhrIo');

/**
 * Проверка равенства другой строке, без учета регистра
 *
 * @param {String} s
 * @return Boolean
 */
  String.prototype.iequals = function(s)
  {
    return goog.isString(s) && (this.toLowerCase() == s.toLowerCase());
  };

/**
 * Выборка элементов
 *
 * @param {String} s
 * @return NodeList
 */
  goog.dom.query = function(s)
  {
    return document.querySelectorAll(s);
  };

/**
 * Получить контент узла и удалить его
 *
 * @param {Node} node
 * @return String
 */
  goog.dom.getNodeContent = function(node)
  {
    if (node = goog.dom.$(node))
    {
      var content = node.innerHTML;
      this.removeNode(node);
      return content;
    }
    return '';
  };

/**
 * Собрать полное имя класс из переданных имен
 *
 * @param {String[]|String} list
 * @return String
 */
  goog.dom.classes.join = function(list)
  {
    return goog.isArray(list) ? list.join(' ') : list;
  };

/**
 * Установить обработчик события для списка элементов
 *
 * @param {goog.events.EventTarget[]|EventTarget[]|goog.events.EventTarget|EventTarget} src
 * @param {String|String[]} type
 * @param {Function|Object} listener
 * @return void
 */
  goog.events.listenAll = function(src, type, listener)
  {
    src.length === null ? this.listen(src, type, listener) : goog.array.forEach(src, function(node){goog.events.listen(node,type,listener);});
  };

/**
 * Вызвать событие для элемента
 *
 * @param {Element} src
 * @param {string|Object|goog.events.Event} type
 * @return Boolean
 */
  goog.events.fireEvent = function(src, type)
  {
    src.getParentEventTarget || (src.getParentEventTarget = function(){return null;});
    return goog.events.dispatchEvent(src, type);
  };

/**
 * Остановить "всплытие" сообщения
 *
 * @return void
 */
  goog.events.Event.prototype.stopBubble = function()
  {
    this.preventDefault();
    this.stopPropagation();
  };

/**
 * Создать tooltip для узла
 *
 * @param {Element|String} node
 * @param {String} html
 * @param {String} className
 * @return goog.ui.Tooltip
 */
  goog.ui.Tooltip.create = function(node, html, className)
  {
    var tip = new goog.ui.Tooltip(node);
    var classes = ['goog-tooltip', 'shadow'];
    className && (goog.isArray(className) ? goog.array.forEach(className, function(c){classes.push(c);}) : classes.push(className));
    tip.className = goog.dom.classes.join(classes);
    tip.setHtml(html);
    return tip;
  };

/**
 * Превратить содержимое узла в модальный диалог
 *
 * @param {Element|String} node
 * @param {goog.ui.Dialog.ButtonSet} buttons
 * @return goog.ui.Dialog
 */
  goog.ui.Dialog.create = function(node, buttons)
  {
    node = goog.dom.$(node);
    var dlg = new goog.ui.Dialog();
    dlg.setButtonSet(buttons);
    dlg.setTitle(node && node.title ? node.title : '');
    dlg.setContent(goog.dom.getNodeContent(node));
    return dlg;
  };

/**
 * Отправка формы с вызовом всех обработчиков
 *
 * @param {Element} form
 * @return Boolean
 */
  goog.dom.forms.submit = function(form)
  {
    goog.events.fireEvent(form, goog.events.EventType.SUBMIT) && form.submit();
  }

  goog.net.XhrIo.methods = {GET: 'GET', POST: 'POST'};

/**
 * Отправить форму, используя AJAX
 *
 * @param {Element} form
 * @param {Function} form
 * @return void
 */
  goog.net.XhrIo.sendForm = function(form, callback)
  {

  };
